﻿using BLevy.Entidad;
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Transactions;
using System.Windows.Forms;
using Dapper;
using DapperExtensions;

namespace BLevy.DBFMigrador
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public DataTable socios = new DataTable();
        public DataTable adherentes = new DataTable();


        private void Form1_Load(object sender, EventArgs e)
        {
            socios = GetSocios();    
    
            
            adherentes = GetAdherentes();

        }

        private void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Maximum = socios.Rows.Count;
            progressBar1.Value = 0;
            lblTotal.Text += socios.Rows.Count.ToString();
            backgroundWorker1.RunWorkerAsync();
        }

        public DataTable GetSocios()
        {
            DataTable YourResultSet = new DataTable();

            OleDbConnection yourConnectionHandler = new OleDbConnection(
                @"Provider=VFPOLEDB.1;Data Source=" + Application.StartupPath + "/;Collating Sequence=machine");

            // if including the full dbc (database container) reference, just tack that on
            //      OleDbConnection yourConnectionHandler = new OleDbConnection(
            //          "Provider=VFPOLEDB.1;Data Source=C:\\SomePath\\NameOfYour.dbc;" );


            // Open the connection, and if open successfully, you can try to query it
            yourConnectionHandler.Open();

            if (yourConnectionHandler.State == ConnectionState.Open)
            {
                string mySQL = "select * from SOCIOS97 ORDER BY Nro ASC";  // dbf table name

                OleDbCommand MyQuery = new OleDbCommand(mySQL, yourConnectionHandler);
                OleDbDataAdapter DA = new OleDbDataAdapter(MyQuery);

                DA.Fill(YourResultSet);

                yourConnectionHandler.Close();
            }

            return YourResultSet;
        }


        


        public DataTable GetAdherentes()
        {
            DataTable YourResultSet = new DataTable();

            OleDbConnection yourConnectionHandler = new OleDbConnection(
                @"Provider=VFPOLEDB.1;Data Source=" + Application.StartupPath);

            // if including the full dbc (database container) reference, just tack that on
            //      OleDbConnection yourConnectionHandler = new OleDbConnection(
            //          "Provider=VFPOLEDB.1;Data Source=C:\\SomePath\\NameOfYour.dbc;" );


            // Open the connection, and if open successfully, you can try to query it
            yourConnectionHandler.Open();

            if (yourConnectionHandler.State == ConnectionState.Open)
            {
                string mySQL = "select * from ADHERE97 ORDER BY NROADHEREN ASC";  // dbf table name

                OleDbCommand MyQuery = new OleDbCommand(mySQL, yourConnectionHandler);
                OleDbDataAdapter DA = new OleDbDataAdapter(MyQuery);

                DA.Fill(YourResultSet);

                yourConnectionHandler.Close();
            }

            return YourResultSet;
        }


        public DataTable GetAdherentesByIdSocio(long socio_id)
        {
            DataTable YourResultSet = new DataTable();

            OleDbConnection yourConnectionHandler = new OleDbConnection(
                @"Provider=VFPOLEDB.1;Data Source=" + Application.StartupPath);

            // if including the full dbc (database container) reference, just tack that on
            //      OleDbConnection yourConnectionHandler = new OleDbConnection(
            //          "Provider=VFPOLEDB.1;Data Source=C:\\SomePath\\NameOfYour.dbc;" );


            // Open the connection, and if open successfully, you can try to query it
            yourConnectionHandler.Open();

            if (yourConnectionHandler.State == ConnectionState.Open)
            {
                string mySQL = "select * from ADHERE97 WHERE nroadheren = " + socio_id;  // dbf table name

                OleDbCommand MyQuery = new OleDbCommand(mySQL, yourConnectionHandler);
                OleDbDataAdapter DA = new OleDbDataAdapter(MyQuery);

                DA.Fill(YourResultSet);

                yourConnectionHandler.Close();
            }

            return YourResultSet;
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            IDbTransaction tran = null;
            int i = 0;
            bool error = false;
            bool resultado = true;
            Encoding encoder = Encoding.GetEncoding(858);

            
            foreach (DataRow row in socios.Rows)
            {
                double recargo = 0;
                double bonificacion = 0;
                double cuota = 60;
                int plan_id = 1;

                i = i + 1;
                try
                {
                    //verifico el costo de la cuota 

                    if ((row.ItemArray[4].ToString() == "M") || (row.ItemArray[4].ToString() == "I"))
                    {
                        cuota = 30;
                        plan_id = 2;
                    }


                    if (Convert.ToDouble(row.ItemArray[13]) <= cuota)
                    {
                        bonificacion = (cuota - Convert.ToDouble(row.ItemArray[13]));
                    }
                    else
                    {
                        recargo = Convert.ToDouble(row.ItemArray[13]) - cuota;
                    }


                    

                        try
                        {

                            string query = "INSERT INTO SOCIOS (NUMERO_CERTIFICADO, APELLIDO, NOMBRES, DOCUMENTO, FECHA_NACIMIENTO, FECHA_INGRESO, FECHA_VENCIMIENTO, FECHA_ULTIMOPAGO, VIGENCIA, EDAD, DIRECCION, LOCALIDAD_ID, ZONA_ID, TELEFONO, PAMI, EMAIL, CONVENIO, ADICIONAL, PLAN_ID, FORMAPAGO_ID, CUOTA, OBSERVACIONES, ACTIVO, FECHA_POSIBLECOBRO, RECARGO, BONIFICACION, CUOTAFIJA) " +
                                       "VALUES (@numero_certificado, @apellido, @nombres, @documento, @fecha_nacimiento, @fecha_ingreso, @fecha_vencimiento, @fecha_ultimopago, @vigencia, @edad, @direccion, @localidad_id, @zona_id, @telefono, @pami, @email, @convenio, @adicional, @plan_id, @formapago_id, @cuota, @observaciones, @activo, @fecha_posiblecobro, @recargo, @bonificacion, @cuotafija); " +
                                       "SELECT LAST_INSERT_ID();";

                            using (IDbConnection _db = new MySqlConnection(ConfigurationManager.ConnectionStrings["LEVYDBMIGRADOR"].ToString()))
                            {
                                _db.Open();
                                tran = _db.BeginTransaction();

                                long socio_id = _db.Query<long>(query,
                                    new
                                    {
                                        numero_certificado = Convert.ToInt32(row.ItemArray[0]),
                                        apellido = row.ItemArray[1].ToString().TrimEnd(),
                                        nombres = row.ItemArray[2].ToString().TrimEnd(),
                                        documento = row.ItemArray[11].ToString().TrimEnd(),
                                        fecha_nacimiento = Convert.ToDateTime(row.ItemArray[5]).ToString("yyyy-MM-dd HH:mm:ss"),
                                        fecha_ingreso = Convert.ToDateTime(row.ItemArray[6]).ToString("yyyy-MM-dd HH:mm:ss"),
                                        fecha_vencimiento = Convert.ToDateTime(row.ItemArray[7]).ToString("yyyy-MM-dd HH:mm:ss"),
                                        fecha_ultimopago = Convert.ToDateTime(row.ItemArray[8]).ToString("yyyy-MM-dd HH:mm:ss"),
                                        vigencia = Convert.ToDateTime(row.ItemArray[6]).ToString("yyyy-MM-dd HH:mm:ss"),
                                        edad = Convert.ToInt32(row.ItemArray[14]),
                                        direccion = row.ItemArray[3].ToString().TrimEnd().ToUpper(),
                                        localidad_id = GetLocalidad(row.ItemArray[4].ToString()),
                                        zona_id = GetZona(row.ItemArray[4].ToString()),
                                        telefono = "NO INFORMA",
                                        pami = GetPami(row.ItemArray[9].ToString().TrimEnd()),
                                        email = "NO INFORMA",
                                        convenio = row.ItemArray[12].ToString().TrimEnd(),
                                        adicional = row.ItemArray[10].ToString().TrimEnd().ToUpper(),
                                        plan_id = plan_id,
                                        formapago_id = 1,
                                        cuota = cuota,
                                        observaciones = Encoding.Default.GetString(encoder.GetBytes(row.ItemArray[15].ToString().TrimEnd().ToUpper())),
                                        activo = 1,
                                        fecha_posiblecobro = Convert.ToDateTime(row.ItemArray[8]).ToString("yyyy-MM-dd HH:mm:ss"),
                                        recargo = recargo,
                                        bonificacion = bonificacion,
                                        cuotafija = 1
                                    }).Single();

                                DataTable Adherentes = GetAdherentesByIdSocio(Convert.ToInt32(row.ItemArray[0]));

                                string query_adherente = "INSERT INTO ADHERENTES (SOCIO_ID, APELLIDO, NOMBRES, DOCUMENTO, FECHA_NACIMIENTO, FECHA_INGRESO, VIGENCIA, EDAD, PARENTESCO, DIRECCION, LOCALIDAD_ID, ZONA_ID, TELEFONO, EMAIL, ADICIONAL, PAMI, CONVENIO, OBSERVACIONES, ACTIVO) " +
                                           "VALUES (@socio_id, @apellido, @nombres, @documento, @fecha_nacimiento, @fecha_ingreso, @vigencia, @edad, @parentesco, @direccion, @localidad_id, @zona_id, @telefono, @email, @adicional, @pami, @convenio, @observaciones, @activo)";

                                foreach (DataRow fila_adherente in Adherentes.Rows)
                                {
                                    int result = _db.Execute(query_adherente, new
                                    {
                                        socio_id = socio_id,
                                        apellido = fila_adherente.ItemArray[1].ToString().TrimEnd().ToUpper(),
                                        nombres = fila_adherente.ItemArray[2].ToString().TrimEnd().ToUpper(),
                                        documento = fila_adherente.ItemArray[11].ToString().TrimEnd(),
                                        fecha_nacimiento = Convert.ToDateTime(fila_adherente.ItemArray[5]).ToString("yyyy-MM-dd HH:mm:ss"),
                                        fecha_ingreso = Convert.ToDateTime((fila_adherente.ItemArray[6])).ToString("yyyy-MM-dd HH:mm:ss"),
                                        vigencia = Convert.ToDateTime(fila_adherente.ItemArray[7]).ToString("yyyy-MM-dd HH:mm:ss"),
                                        edad = Convert.ToInt32(fila_adherente.ItemArray[13]),
                                        parentesco = fila_adherente.ItemArray[12].ToString().TrimEnd(),
                                        direccion = fila_adherente.ItemArray[3].ToString().TrimEnd().ToUpper(),
                                        localidad_id = GetLocalidad(fila_adherente.ItemArray[4].ToString()),
                                        zona_id = GetZona(fila_adherente.ItemArray[4].ToString()),
                                        telefono = "NO INFORMA",
                                        email = "NO INFORMA",
                                        adicional = fila_adherente.ItemArray[10].ToString().TrimEnd().ToUpper(),
                                        pami = GetPami(fila_adherente.ItemArray[9].ToString().TrimEnd()),
                                        convenio = fila_adherente.ItemArray[11].ToString().ToUpper(),
                                        observaciones = fila_adherente.ItemArray[14].ToString().TrimEnd().ToUpper(),
                                        activo = 1
                                    });

                                    if (result == 0)
                                    {
                                        resultado = false;
                                        break;
                                    }
                                }
                                if (resultado == true)
                                {
                                    tran.Commit();
                                    //MessageBox.Show("Datos migrados con Exito");
                                }
                            }
                         

                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                            tran.Rollback();
                        }
                    


                    backgroundWorker1.ReportProgress(i);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

                
            }

            if (resultado == true)
            {
                MessageBox.Show("Datos migrados con exito.");
            }
        }


        private DateTime GetFechaVigencia(int numero_certificado)
        {
            DataTable YourResultSet = new DataTable();

            OleDbConnection yourConnectionHandler = new OleDbConnection(
                @"Provider=VFPOLEDB.1;Data Source=" + Application.StartupPath);

            // if including the full dbc (database container) reference, just tack that on
            //      OleDbConnection yourConnectionHandler = new OleDbConnection(
            //          "Provider=VFPOLEDB.1;Data Source=C:\\SomePath\\NameOfYour.dbc;" );


            // Open the connection, and if open successfully, you can try to query it
            yourConnectionHandler.Open();

            if (yourConnectionHandler.State == ConnectionState.Open)
            {
                string mySQL = "select FEC_VIG from ADHERE97 WHERE nroadheren = " + numero_certificado;  // dbf table name

                OleDbCommand MyQuery = new OleDbCommand(mySQL, yourConnectionHandler);
                OleDbDataAdapter DA = new OleDbDataAdapter(MyQuery);

                DA.Fill(YourResultSet);

                yourConnectionHandler.Close();
            }
            
            DateTime fecha_vigencia = Convert.ToDateTime(YourResultSet.Rows[0].ItemArray[5]);
            return fecha_vigencia;
        }


        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;
            lblCantidad.Text = e.ProgressPercentage.ToString();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            progressBar1.Maximum = adherentes.Rows.Count;
            progressBar1.Value = 0;
            lblTotal.Text += adherentes.Rows.Count;
            backgroundWorker2.RunWorkerAsync();
        }

        private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
        {
            MySqlTransaction transaccion;
            MySqlConnection db = new MySqlConnection("Server=localhost;Database=levy;Uid=root;Pwd=root;");

            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = db;
            db.Open();
            transaccion = db.BeginTransaction();
            int i = 0;
            bool error = false;
            foreach (DataRow row in adherentes.Rows)
            {
                i = i + 1;
                try
                {
                    if (Convert.ToInt32(row.ItemArray[0]) != 1592 && Convert.ToInt32(row.ItemArray[0]) != 3252 && Convert.ToInt32(row.ItemArray[0]) != 3645 && Convert.ToInt32(row.ItemArray[0]) != 10167 && Convert.ToInt32(row.ItemArray[0]) != 10215 && Convert.ToInt32(row.ItemArray[0]) != 4631)
                    {
                        cmd.CommandText = "INSERT INTO ADHERENTES (SOCIO_ID, APELLIDO, NOMBRES, DOCUMENTO, FECHA_NACIMIENTO, FECHA_INGRESO, VIGENCIA, EDAD, PARENTESCO, DIRECCION, LOCALIDAD_ID, ZONA_ID, TELEFONO, EMAIL, ADICIONAL, PAMI, CONVENIO, OBSERVACIONES, ACTIVO) " +
                                           "VALUES (@socio_id, @apellido, @nombres, @documento, @fecha_nacimiento, @fecha_ingreso, @vigencia, @edad, @parentesco, @direccion, @localidad_id, @zona_id, @telefono, @email, @adicional, @pami, @convenio, @observaciones, @activo)";
                        Thread.Sleep(100);
                        cmd.Parameters.AddWithValue("@socio_id", Convert.ToInt32(row.ItemArray[0]));
                        cmd.Parameters.AddWithValue("@apellido", row.ItemArray[1].ToString().TrimEnd().ToUpper());
                        cmd.Parameters.AddWithValue("@nombres", row.ItemArray[2].ToString().TrimEnd().ToUpper());
                        cmd.Parameters.AddWithValue("@documento", row.ItemArray[8].ToString().TrimEnd());
                        cmd.Parameters.AddWithValue("@fecha_nacimiento", Convert.ToDateTime(row.ItemArray[5]).ToString("yyyy-MM-dd HH:mm:ss"));
                        cmd.Parameters.AddWithValue("@fecha_ingreso", GetFechaIngresoTitular(Convert.ToInt32(row.ItemArray[0])).ToString("yyyy-MM-dd HH:mm:ss"));
                        cmd.Parameters.AddWithValue("@vigencia", Convert.ToDateTime(row.ItemArray[7]).ToString("yyyy-MM-dd HH:mm:ss"));
                        cmd.Parameters.AddWithValue("@edad", Convert.ToInt32(row.ItemArray[13]));
                        cmd.Parameters.AddWithValue("@parentesco", row.ItemArray[12].ToString().TrimEnd());
                        cmd.Parameters.AddWithValue("@direccion", row.ItemArray[3].ToString().TrimEnd().ToUpper());
                        cmd.Parameters.AddWithValue("@localidad_id", GetLocalidad(row.ItemArray[4].ToString()));
                        cmd.Parameters.AddWithValue("@zona_id", GetZona(row.ItemArray[4].ToString()));
                        cmd.Parameters.AddWithValue("@telefono", "NO INFORMA");
                        cmd.Parameters.AddWithValue("@email", "NO INFORMA");
                        cmd.Parameters.AddWithValue("@adicional", row.ItemArray[10].ToString().TrimEnd().ToUpper());
                        cmd.Parameters.AddWithValue("@pami", GetPami(row.ItemArray[9].ToString().TrimEnd()));
                        cmd.Parameters.AddWithValue("@convenio", row.ItemArray[11].ToString().ToUpper());
                        cmd.Parameters.AddWithValue("@observaciones", row.ItemArray[14].ToString().TrimEnd().ToUpper());
                        cmd.Parameters.AddWithValue("@activo", 1);

                        int resultado = cmd.ExecuteNonQuery();
                        cmd.Parameters.Clear();

                        if (resultado == 0)
                        {
                            error = true;
                            break;
                        }

                        backgroundWorker2.ReportProgress(i);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }



            }
            if (error != true)
            {
                transaccion.Commit();

                MessageBox.Show("Datos migrados con Exito");
            }
            else
            {
                transaccion.Rollback();

                MessageBox.Show("Ocurrio un erro al migrar los datos");
            }
            db.Close();
        }


        private int GetZona(string zona)
        {
            MySqlConnection db = new MySqlConnection("Server=localhost;Database=levy;Uid=root;Pwd=root;");

            MySqlCommand cmd = new MySqlCommand();
            cmd.CommandText = "SELECT id FROM ZONAS WHERE ZONA = @zona";
            cmd.Connection = db;
            cmd.Parameters.AddWithValue("@zona", zona);
            db.Open();
            int _zona = Convert.ToInt32(cmd.ExecuteScalar());
            db.Close();
            return _zona;
        }

        private int GetPami(string pami)
        {
            if (pami == "False")
                return 0;
            else
                return 1;
        }

        private DateTime GetFechaIngresoTitular(int socio_id)
        {
            MySqlConnection db = new MySqlConnection("Server=localhost;Database=levy;Uid=root;Pwd=root;");

            MySqlCommand cmd = new MySqlCommand();
            cmd.CommandText = "SELECT FECHA_INGRESO FROM SOCIOS WHERE ID = @id";
            cmd.Connection = db;
            cmd.Parameters.AddWithValue("@id", socio_id);
            db.Open();
            DateTime fecha_ingreso = Convert.ToDateTime(cmd.ExecuteScalar());
            db.Close();
            return fecha_ingreso;
        }

        private int GetLocalidad(string zona)
        {
            MySqlConnection db = new MySqlConnection("Server=localhost;Database=levy;Uid=root;Pwd=root;");

            MySqlCommand cmd = new MySqlCommand();
            cmd.CommandText = "SELECT localidad_id FROM ZONAS WHERE ZONA = @zona";
            cmd.Connection = db;
            cmd.Parameters.AddWithValue("@zona", zona);
            db.Open();
            int localidad = Convert.ToInt32(cmd.ExecuteScalar());
            db.Close();
            return localidad;
        }

        private void backgroundWorker2_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;
            lblCantidad.Text = e.ProgressPercentage.ToString();
        }


        private int CrearProvincia()
        {
            MySqlConnection db = new MySqlConnection("Server=localhost;Database=levy;Uid=root;Pwd=root;");

            MySqlCommand cmd = new MySqlCommand();
            cmd.CommandText = "INSERT INTO PROVINCIAS (PROVINCIA, ACTIVO) VALUES (@provincia, @activo)";
            cmd.Connection = db;
            cmd.Parameters.AddWithValue("@provincia", "CORRIENTES");
            cmd.Parameters.AddWithValue("@activo", 1);
            db.Open();
            int resultado = Convert.ToInt32(cmd.ExecuteScalar());
            db.Close();
            return resultado;
        }

        private int CrearCiudad()
        {
            MySqlConnection db = new MySqlConnection("Server=localhost;Database=levy;Uid=root;Pwd=root;");

            MySqlCommand cmd = new MySqlCommand();
            cmd.CommandText = "INSERT INTO CIUDADES (PROVINCIA_ID, CIUDAD, ACTIVO) VALUES (@provincia_id, @ciudad, @activo)";
            cmd.Connection = db;
            cmd.Parameters.AddWithValue("@provincia_id", 1);
            cmd.Parameters.AddWithValue("@ciudad", "MERCEDES");
            cmd.Parameters.AddWithValue("@activo", 1);
            db.Open();
            int resultado = Convert.ToInt32(cmd.ExecuteScalar());
            db.Close();
            return resultado;
        }


        private int CrearLocalidad()
        {
            MySqlConnection db = new MySqlConnection("Server=localhost;Database=levy;Uid=root;Pwd=root;");

            MySqlCommand cmd = new MySqlCommand();

            string query = @"INSERT INTO LOCALIDADES (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD, ACTIVO) VALUES (1, 1, 'MERCEDES', 1);
                            INSERT INTO LOCALIDADES (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD, ACTIVO) VALUES (1, 1, 'CHAVARRIA', 1);
                            INSERT INTO LOCALIDADES (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD, ACTIVO) VALUES (1, 1, 'FELIPE I YOFRE', 1);
                            INSERT INTO LOCALIDADES (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD, ACTIVO) VALUES (1, 1, 'MARIANO I LOZA (Solari)', 1);";

            cmd.CommandText = query;
            cmd.Connection = db;

            db.Open();
            int resultado = Convert.ToInt32(cmd.ExecuteScalar());            
            db.Close();
            return resultado;
        }

        private int CrearZonas()
        {
            MySqlConnection db = new MySqlConnection("Server=localhost;Database=levy;Uid=root;Pwd=root;");

            MySqlCommand cmd = new MySqlCommand();
            string query = @"INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'A', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'B', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'C', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'D', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'E', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'F', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'G', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'H', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'I', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'J', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'K', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'L', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'M', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'N', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'O', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'P', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'Q', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'R', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'T', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'U', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'W', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'X', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 1, 'Z', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 3, 'Y', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 4, 'S', 1);
                            INSERT INTO ZONAS (PROVINCIA_ID, CIUDAD_ID, LOCALIDAD_ID, ZONA, ACTIVO) VALUES (1, 1, 2, 'V', 1);";

            cmd.CommandText = query;
            cmd.Connection = db;

            db.Open();
            int resultado = Convert.ToInt32(cmd.ExecuteScalar());
            db.Close();
            return resultado;


        }


        private int CrearCarencias()
        {
            MySqlConnection db = new MySqlConnection("Server=localhost;Database=levy;Uid=root;Pwd=root;");

            MySqlCommand cmd = new MySqlCommand();
            string query = @"INSERT INTO CARENCIAS (NOMBRE, EDAD_DESDE, EDAD_HASTA, PERIODO, ACTIVO) VALUES ('0 A 20 AÑOS', 0, 20, 6, 1);
                            INSERT INTO CARENCIAS (NOMBRE, EDAD_DESDE, EDAD_HASTA, PERIODO, ACTIVO) VALUES ('21 A 39 AÑOS', 21, 39, 8, 1);
                            INSERT INTO CARENCIAS (NOMBRE, EDAD_DESDE, EDAD_HASTA, PERIODO, ACTIVO) VALUES ('40 A 49 AÑOS', 40, 49, 10, 1);
                            INSERT INTO CARENCIAS (NOMBRE, EDAD_DESDE, EDAD_HASTA, PERIODO, ACTIVO) VALUES ('50 A 59 AÑOS', 50, 59, 12, 1);
                            INSERT INTO CARENCIAS (NOMBRE, EDAD_DESDE, EDAD_HASTA, PERIODO, ACTIVO) VALUES ('60 A 69 AÑOS', 60, 69, 18, 1);
                            INSERT INTO CARENCIAS (NOMBRE, EDAD_DESDE, EDAD_HASTA, PERIODO, ACTIVO) VALUES ('70 A 79 AÑOS', 70, 79, 24, 1); 
                            INSERT INTO CARENCIAS (NOMBRE, EDAD_DESDE, EDAD_HASTA, PERIODO, ACTIVO) VALUES ('80 A 89 AÑOS', 80, 89, 36, 1);
                            INSERT INTO CARENCIAS (NOMBRE, EDAD_DESDE, EDAD_HASTA, PERIODO, ACTIVO) VALUES ('90 A MÁS AÑOS', 90, 120, 36, 1);";

            cmd.CommandText = query;
            cmd.Connection = db;

            db.Open();
            int resultado = Convert.ToInt32(cmd.ExecuteScalar());
            db.Close();
            return resultado;
        }


        private int CrearFormasPago()
        {
            MySqlConnection db = new MySqlConnection("Server=localhost;Database=levy;Uid=root;Pwd=root;");

            MySqlCommand cmd = new MySqlCommand();
            string query = @"INSERT INTO FORMASPAGO (FORMA_PAGO, DEBITO_AUTOMATICO, ACTIVO) VALUES ('EFECTIVO', 0, 1);
                            INSERT INTO FORMASPAGO (FORMA_PAGO, DEBITO_AUTOMATICO, ACTIVO) VALUES ('DÉBITO AUTOMÁTICO', 1, 1);";

            cmd.CommandText = query;
            cmd.Connection = db;

            db.Open();
            int resultado = Convert.ToInt32(cmd.ExecuteScalar());
            db.Close();
            return resultado;
        }


        private int CrearCobradores()
        {
            MySqlConnection db = new MySqlConnection("Server=localhost;Database=levy;Uid=root;Pwd=root;");

            MySqlCommand cmd = new MySqlCommand();
            string query = @"INSERT INTO COBRADORES (FECHAREGISTRO, APELLIDO, NOMBRES, DOCUMENTO, CALLE, 
                            NUMERACION, PISO, DEPARTAMENTO, LOCALIDAD_ID, ZONA_ID, TELEFONOPARTICULAR, TELEFONOCELULAR, 
                            EMAIL, COMISION, VIGENCIA, ACTIVO) VALUES ('" + DateTime.Now.ToString("yyyy-MM-dd") + "', 'COBRADOR', 'EMPRESA', 'N/R', 'N/R', 'N/R', 'N/R', 'N/R', 1, 1, 'N/R', 'N/R', 'N/R', 0, '" + DateTime.Now.AddYears(10).ToString("yyyy-MM-dd") + "', 1);" +
                            "INSERT INTO COBRADORES (FECHAREGISTRO, APELLIDO, NOMBRES, DOCUMENTO, CALLE, " +
                            "NUMERACION, PISO, DEPARTAMENTO, LOCALIDAD_ID, ZONA_ID, TELEFONOPARTICULAR, TELEFONOCELULAR,  " +
                            "EMAIL, COMISION, VIGENCIA, ACTIVO) VALUES ('" + DateTime.Now.ToString("yyyy-MM-dd") + "', 'COBRADOR', 'DÉBITO', 'N/R', 'N/R', 'N/R', 'N/R', 'N/R', 1, 1, 'N/R', 'N/R', 'N/R', 0, '" + DateTime.Now.AddYears(10).ToString("yyyy-MM-dd") + "', 1);";

            cmd.CommandText = query;
            cmd.Connection = db;

            db.Open();
            int resultado = Convert.ToInt32(cmd.ExecuteScalar());
            db.Close();
            return resultado;
        }

        private int CrearUsuario()
        {
            MySqlConnection db = new MySqlConnection("Server=localhost;Database=levy;Uid=root;Pwd=root;");

            MySqlCommand cmd = new MySqlCommand();
            string query = @"INSERT INTO ROLES(ROL, ACTIVO) VALUES ('ADMINSTRADOR', 1);
                            INSERT INTO PERMISOSROLES(ROL_ID, LEER, INSERTAR, MODIFICAR, ELIMINAR) VALUES(1, 1, 1, 1, 1);
                            INSERT INTO USUARIOS(FECHA_REGISTRO, ROL_ID, DOCUMENTO, APELLIDO, NOMBRES, USUARIO, PASSWORD, ACTIVO) " +
                            "VALUES('" + DateTime.Now.ToString("yyyy-MM-dd") + "', 1, 'N/R', 'N/R', 'N/R', 'ADMIN', 'tSHKpuHbguWgHJJKQZhwy3K4FjU=', 1);";

            cmd.CommandText = query;
            cmd.Connection = db;

            db.Open();
            int resultado = Convert.ToInt32(cmd.ExecuteScalar());
            db.Close();
            return resultado;
        }

        private int CrearPrefijo()
        {
            MySqlConnection db = new MySqlConnection("Server=localhost;Database=levy;Uid=root;Pwd=root;");

            MySqlCommand cmd = new MySqlCommand();
            string query = @"INSERT INTO CUPONESPREFIJOS(PREFIJO, ACTIVO) VALUES ('0203', 1)";

            cmd.CommandText = query;
            cmd.Connection = db;

            db.Open();
            int resultado = Convert.ToInt32(cmd.ExecuteScalar());
            db.Close();
            return resultado;
        }

        private int CrearPlan()
        {
            MySqlConnection db = new MySqlConnection("Server=localhost;Database=levy;Uid=root;Pwd=root;");

            MySqlCommand cmd = new MySqlCommand();
            string query = @"INSERT INTO PLANES(NOMBRE, DESCRIPCION, FECHAREGISTRO, COSTO_BASE, TITULAR, EDAD_TITULAR, CONYUGE, EDAD_CONYUGE, " +
            "HIJOS, CANTIDAD_HIJOS, EDAD_HIJOS, OTROS, CANTIDAD_OTROS, EDAD_OTROS, ACTIVO, RECARGO) VALUES ('PLAN BASICO', " +
            "'GRUPO FAMILIAR QUE COMPRENDE AL TITULAR Y CONYUGE HASTA 49 AÑOS CON 3 HIJOS MENORES DE 21 AÑOS.', '2015-07-24', 60.00, 1, 49, " +
            "1, 49, 1, 3, 21 , 0, 0, 0, 1, 1);" +
            "INSERT INTO ADICIONALESPLANES(PLAN_ID, EDAD_DESDE, EDAD_HASTA, COSTO_ADICIONAL) VALUES (1, 0, 49, 5.00);" +
            "INSERT INTO ADICIONALESPLANES(PLAN_ID, EDAD_DESDE, EDAD_HASTA, COSTO_ADICIONAL) VALUES (1, 50, 59, 10.00);" +
            "INSERT INTO ADICIONALESPLANES(PLAN_ID, EDAD_DESDE, EDAD_HASTA, COSTO_ADICIONAL) VALUES (1, 60, 69, 20.00);" +
            "INSERT INTO ADICIONALESPLANES(PLAN_ID, EDAD_DESDE, EDAD_HASTA, COSTO_ADICIONAL) VALUES (1, 70, 79, 35.00);" +
            "INSERT INTO ADICIONALESPLANES(PLAN_ID, EDAD_DESDE, EDAD_HASTA, COSTO_ADICIONAL) VALUES (1, 80, 89, 45.00);" +
            "INSERT INTO ADICIONALESPLANES(PLAN_ID, EDAD_DESDE, EDAD_HASTA, COSTO_ADICIONAL) VALUES (1, 90, 120, 55.00);";

            string query2 = @"INSERT INTO PLANES(NOMBRE, DESCRIPCION, FECHAREGISTRO, COSTO_BASE, TITULAR, EDAD_TITULAR, CONYUGE, EDAD_CONYUGE, " +
            "HIJOS, CANTIDAD_HIJOS, EDAD_HIJOS, OTROS, CANTIDAD_OTROS, EDAD_OTROS, ACTIVO, RECARGO) VALUES ('PLAN ZONAS M - I', " +
            "'GRUPO FAMILIAR QUE COMPRENDE AL TITULAR Y CONYUGE SIN LIMITE DE EDAD Y SIN LIMITE DE CANTIDAD DE HIJOS MENORES A 18 AÑOS.', '2015-07-24', 30.00, 1, 150, " +
            "1, 150, 1, 20, 18 , 0, 0, 0, 1, 1);" +
            "INSERT INTO ADICIONALESPLANES(PLAN_ID, EDAD_DESDE, EDAD_HASTA, COSTO_ADICIONAL) VALUES (2, 0, 49, 10.00);" +
            "INSERT INTO ADICIONALESPLANES(PLAN_ID, EDAD_DESDE, EDAD_HASTA, COSTO_ADICIONAL) VALUES (2, 50, 69, 20.00);" +
            "INSERT INTO ADICIONALESPLANES(PLAN_ID, EDAD_DESDE, EDAD_HASTA, COSTO_ADICIONAL) VALUES (2, 70, 120, 30.00);";
 
            cmd.CommandText = query;
            cmd.Connection = db;
            
            db.Open();
            int resultado = Convert.ToInt32(cmd.ExecuteScalar());
            if (resultado >= 0)
            {
                cmd = new MySqlCommand();
                cmd.Connection = db;
                cmd.CommandText = query2;
                int resultado2 = Convert.ToInt32(cmd.ExecuteScalar());
            }
            db.Close();
            return resultado;
        }


        private void button2_Click_1(object sender, EventArgs e)
        {
            try
            {
                textBox1.Text += "Creando Provincia...";
                int resultado = CrearProvincia();
                if(resultado >= 0)
                {
                    textBox1.Text += Environment.NewLine + "Provincia creada exitosamente.";
                }
                else
                {
                    MessageBox.Show("Ocurrio un error al crear la Provincia");
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                textBox1.Text += Environment.NewLine + "Creando Ciudad...";
                int resultado = CrearCiudad();
                if (resultado >= 0)
                {
                    textBox1.Text += Environment.NewLine + "Ciudad creada exitosamente.";
                }
                else
                {
                    MessageBox.Show("Ocurrio un error al crear la Ciudad");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            try
            {
                textBox1.Text += Environment.NewLine + "Creando Localidades...";
                int resultado = CrearLocalidad();
                if (resultado >= 0)
                {
                    textBox1.Text += Environment.NewLine + "Localidades creadas exitosamente.";
                }
                else
                {
                    MessageBox.Show("Ocurrio un error al crear las Localidades");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            try
            {
                textBox1.Text += Environment.NewLine + "Creando Zonas...";
                int resultado = CrearZonas();
                if (resultado >= 0)
                {
                    textBox1.Text += Environment.NewLine + "Zonas creadas exitosamente.";
                }
                else
                {
                    MessageBox.Show("Ocurrio un error al crear las Zonas");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button6_Click(object sender, EventArgs e)
        {
            try
            {
                textBox1.Text += Environment.NewLine + "Creando Períodos de Carencia...";
                int resultado = CrearCarencias();
                if (resultado >= 0)
                {
                    textBox1.Text += Environment.NewLine + "Períodos de Carencia creados exitosamente.";
                }
                else
                {
                    MessageBox.Show("Ocurrio un error al crear los Períodos de Carencia");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button9_Click(object sender, EventArgs e)
        {
            try
            {
                textBox1.Text += Environment.NewLine + "Creando Formas de Pago...";
                int resultado = CrearFormasPago();
                if (resultado >= 0)
                {
                    textBox1.Text += Environment.NewLine + "Formas de Pago creadas exitosamente.";
                }
                else
                {
                    MessageBox.Show("Ocurrio un error al crear las Formas de Pago");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button8_Click(object sender, EventArgs e)
        {
            try
            {
                textBox1.Text += Environment.NewLine + "Creando Cobradores...";
                int resultado = CrearCobradores();
                if (resultado >= 0)
                {
                    textBox1.Text += Environment.NewLine + "Cobradores creados exitosamente.";
                }
                else
                {
                    MessageBox.Show("Ocurrio un error al crear los Cobradores");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button10_Click(object sender, EventArgs e)
        {
            try
            {
                textBox1.Text += Environment.NewLine + "Creando Usuario...";
                int resultado = CrearUsuario();
                if (resultado >= 0)
                {
                    textBox1.Text += Environment.NewLine + "Usuario creado exitosamente.";
                }
                else
                {
                    MessageBox.Show("Ocurrio un error al crear el Usuario");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button11_Click(object sender, EventArgs e)
        {
            try
            {
                textBox1.Text += Environment.NewLine + "Creando Numeración de Cupones...";
                int resultado = CrearPrefijo();
                if (resultado >= 0)
                {
                    textBox1.Text += Environment.NewLine + "Numeración creada exitosamente.";
                }
                else
                {
                    MessageBox.Show("Ocurrio un error al crear la Numeración");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button7_Click(object sender, EventArgs e)
        {
            try
            {
                textBox1.Text += Environment.NewLine + "Creando Planes Basicos...";
                int resultado = CrearPlan();
                if (resultado >= 0)
                {
                    textBox1.Text += Environment.NewLine + "Planes Basicos creados exitosamente.";
                }
                else
                {
                    MessageBox.Show("Ocurrio un error al crear los Planes.");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }




        private string ConvertAsciiToUTF8(string inAsciiString)
        {
            // Create encoding ASCII.

            Encoding inAsciiEncoding = Encoding.ASCII;
            // Create encoding UTF8.


            Encoding outUTF8Encoding = Encoding.UTF8;

            // Convert the input string into a byte[].


            byte [] inAsciiBytes = inAsciiEncoding.GetBytes(inAsciiString);
            // Conversion string in ASCII encoding to UTF8 encoding byte array.


            byte [] outUTF8Bytes = Encoding.Convert(inAsciiEncoding, outUTF8Encoding, inAsciiBytes);

            // Convert the byte array into a char[] and then into a string.


            char [] inUTF8Chars = new char [outUTF8Encoding.GetCharCount(outUTF8Bytes, 0, outUTF8Bytes.Length)];
            outUTF8Encoding.GetChars(outUTF8Bytes, 0, outUTF8Bytes.Length, inUTF8Chars, 0);

            string outUTF8String = new string (inUTF8Chars);
            return outUTF8String;
        }

        private void button12_Click(object sender, EventArgs e)
        {
            DataTable socios = GetSocios();
            bool exito = true;
            long socio_id = 0;

            try
            {
                using (IDbConnection _db = new MySqlConnection(ConfigurationManager.ConnectionStrings["LEVYDBMIGRADORTEST"].ToString()))
                {
                    foreach (DataRow row in socios.Rows)
                    {
                        string query = "INSERT INTO SOCIOS(ID, APELLIDO, NOMBRES, DOCUMENTO) VALUES(@id, @apellido, @nombres, @documento)";
                        socio_id = Convert.ToInt32(row.ItemArray[0]);

                        int resultado = _db.Execute(query, new
                        {
                            id = Convert.ToInt32(row.ItemArray[0]),
                            apellido = row.ItemArray[1].ToString(),
                            nombres = row.ItemArray[2].ToString(),
                            documento = row.ItemArray[11].ToString()
                        });

                        if (resultado == 0)
                        {
                            exito = false;
                            break;
                        }

                    }
                    if (exito == true)
                    {
                        MessageBox.Show("MIGRADO OK");
                    }
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show("Error : " + ex.Message + " - " + socio_id);
            }
        }

        private void button13_Click(object sender, EventArgs e)
        {
            DataTable adherentes = GetAdherentes();
            bool exito = true;
            long socio_id = 0;

            try
            {
                using (IDbConnection _db = new MySqlConnection(ConfigurationManager.ConnectionStrings["LEVYDBMIGRADORTEST"].ToString()))
                {
                    foreach (DataRow row in adherentes.Rows)
                    {
                        string query = "INSERT INTO ADHERENTES(SOCIO_ID, APELLIDO, NOMBRES, DOCUMENTO) VALUES(@socio_id, @apellido, @nombres, @documento)";
                        socio_id = Convert.ToInt32(row.ItemArray[0]);

                        int resultado = _db.Execute(query, new
                        {
                            socio_id = Convert.ToInt32(row.ItemArray[0]),
                            apellido = row.ItemArray[1].ToString(),
                            nombres = row.ItemArray[2].ToString(),
                            documento = row.ItemArray[8].ToString()
                        });

                        if (resultado == 0)
                        {
                            exito = false;
                            break;
                        }

                    }
                    if (exito == true)
                    {
                        MessageBox.Show("MIGRADO OK");
                    }
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show("Error : " + ex.Message + " - " + socio_id);
            }
        }




    }
}

